package com.java.service;

import com.java.bean.Courier;
import com.java.dao.BaseCourierDao;
import com.java.dao.impl.CourierDaoMysql;
import com.java.exception.DuplicateException;

import java.util.List;
import java.util.Map;

public class CourierService {

    private static final BaseCourierDao dao = new CourierDaoMysql();

    /**
     * 控制台信息
     *
     * @return [{"size":XX,"day":XX}]
     */
    public static Map<String, Integer> console() {
        return dao.console();
    }

    /**
     * 列出一定数量的快递员信息
     *
     * @param offset     偏移量
     * @param pageNumber 数量
     * @return 快递员集合
     */
    public static List<Courier> listCourier(int offset, int pageNumber) {
        return dao.listCourier(offset, pageNumber);
    }

    /**
     * 新增快递员
     *
     * @param courier 快递员信息 要求传入：name phone identification password email regtime
     * @return > 0 = success
     *          -1 = error
     *          -2 = duplicate phone number
     *          -3 = duplicate idNumber
     */
    public static int insert(Courier courier) throws DuplicateException {
        if (UserService.getUserByEmail(courier.getEmail()) != null) return -4;
        courier.setLogintime(courier.getRegtime());
        return dao.insert(courier);
    }

    /**
     * 根据快递员手机号码获取快递员信息
     *
     * @param phone 快递员手机号码
     * @return 快递员信息
     */
    public static Courier getCourierByPhone(String phone) {
        return dao.getCourierByPhone(phone);
    }

    /**
     * 根据快递员email获取快递员信息
     *
     * @param email 快递员email
     * @return 快递员信息
     */
    public static Courier getCourierByEmail(String email) {
        return dao.getCourierByEmail(email);
    }

    /**
     * 更新快递员信息
     *
     * @param id      快递员id
     * @param courier 新的快递员信息 要求传入：name phone identification password dispatches email
     * @return > 0 = success
     *          -1 = error
     *          -2 = duplicate phone number
     *          -3 = duplicate
     */
    public static int update(int id, Courier courier) throws DuplicateException {
        return dao.update(id, courier);
    }

    /**
     * 删除快递员信息（假删除）
     *
     * @param id 快递员id
     * @return 成功 true 失败 false
     */
    public static boolean delete(int id) {
        return dao.delete(id) > 0;
    }

    public static boolean addDispatches(int id) {
        return dao.addDispatches(id);
    }

    /**
     * 快递员登录
     *
     * @param name     姓名
     * @param password 密码
     * @return 成功返回快递员信息， 否则返回null
     */
    public static Courier login(String name, String password) {
        return dao.login(name, password);
    }
}
